# __init__.py 为初始化加载文件
import inspect
import json
import logging
import os
import random
import re
import subprocess
import time
from datetime import datetime, timedelta

import websocket
from apscheduler.schedulers.background import BackgroundScheduler
from airscript.ui.dialog import toast
from ascript.android.node import Selector
# 导入系统资源模块
from ascript.android.system import R
# 导入动作模块
from ascript.android import action
# 导入节点检索模块
from ascript.android import node
# 导入图色检索模块
from ascript.android import screen

from airscript.system import Channel
import requests
from websocket import create_connection
from pytz import timezone
import pickle

from .process_function import *
from .ai_aip import get_btn, ai_btn_mate

from .user_message_list import add_assistant_start

# 配置日志记录以捕获调度器的错误
logging.basicConfig(level=logging.ERROR, force=True)
logger = logging.getLogger(__name__)

logger.info("程序开始运行 log")



def btnDiu(contents):
    #定位捡瓶子按钮并点击
    Selector().id("com.tanyu.me:id/btn_diu").click().find()

    #定位到文本框组件并输入内容

    # logger.info(f"瓶子内容为：{contents}")

    # 创建一个包含5个字符串的列表
    # string_list = ["可以语音呀", "我可以语音", "有人吗，语音可以找我", "可以语音", "语音来"]
    string_list = contents

    # 随机取出一个并打印
    random_string = random.choice(string_list)
    logger.info(random_string)



    Selector().id("com.tanyu.me:id/contentEdt").click().find()
    time.sleep(1)

    Selector().id("com.tanyu.me:id/contentEdt").click().input(random_string).find()


    #定位扔出按钮，并点击

    Selector().id("com.tanyu.me:id/fasong_hf").click().find()

def btnDiu_auto():

    btn_content = get_btn(get_device_id())

    # 定位捡瓶子按钮并点击
    Selector().id("com.tanyu.me:id/btn_diu").click().find()

    #定位到文本框组件并输入内容

    Selector().id("com.tanyu.me:id/contentEdt").click().find()
    time.sleep(1)

    Selector().id("com.tanyu.me:id/contentEdt").click().input(btn_content).find()

    time.sleep(1)

    # 定位扔出按钮，并点击

    Selector().id("com.tanyu.me:id/fasong_hf").click().find()

    logger.info("扔出瓶子" + btn_content)
def receiveMessage(data):
    uri = "ws://103.149.200.228:8080/myWs1"  # 替换为你的 WebSocket 服务器地址
    ws = create_connection(uri)
    ws.send(json.dumps(data))  # 将 Python 字典序列化为 JSON 字符串
    logger.info("> 发送 JSON 数据")
    ws.close()


def send_success(data):
    data2 = {

        "row": data[1],
        "message": ["喜欢你", ],
        "id": "id_XiaomiRedmi 8",
        "user": "大王",
        "type": "send_success"

    }

    # logger.info(f"当前行号是 {data[1]}")
    uri = "ws://103.149.200.228:8080/myWs1"  # 替换为你的 WebSocket 服务器地址
    ws = create_connection(uri)
    ws.send(json.dumps(data2))  # 将 Python 字典序列化为 JSON 字符串
    logger.info("> 发送 成功的 JSON 数据")
    ws.close()

def device_message_list_add(data):
    data1 = data
    # 要检查的键
    user = data1.get("user")
    device_id = "xiaomi11"

    role = data1.get("role")

    # 获取当前脚本的文件路径
    current_file_path = os.path.abspath(__file__)

    # 获取当前脚本所在的文件夹路径
    current_directory = os.path.dirname(current_file_path)

    logger.info("当前脚本所在的文件夹路径:", current_directory)

    # 从文件中读取并反序列化对象
    with open(current_directory + '/device_message_list.pkl', 'rb') as file:
        loaded_data = pickle.load(file)
    logger.info("对象已从 data.pkl 反序列化")
    logger.info(loaded_data)

    device_message_list = loaded_data

    message_list = loaded_data.get("xiaomi11")

    # 检查字典中是否包含该键
    if user in message_list:
        # 如果包含，则打印键值
        logger.info(f"{user} 曾经发送来消息")



        # 判断是user还是assistant

        if role == "user":
            # 获取该联系人的所有聊天记录
            user_message_list = message_list.get(user)
            massage = []
            massage.append("user")
            massage.append(data1.get("message"))
            user_message_list.append(massage)
            message_list.update({user: user_message_list})
            device_message_list.update({device_id: message_list})

        else:
            # 获取该联系人的所有聊天记录
            user_message_list = message_list.get(user)
            massage = []
            massage.append("assistant")
            massage.append(data1.get("message"))
            user_message_list.append(massage)
            message_list.update({user: user_message_list})
            device_message_list.update({device_id: message_list})

    else:
        # 向列表插入用户
        message_list = {}
        user_message_list = []
        massage = []
        massage.append("user")
        massage.append(data1.get("message"))
        user_message_list.append(massage)
        message_list.update({user: user_message_list})
        # 向列表插入消息
        device_message_list.update({device_id: message_list})
        logger.info(f"{user} 第一次发送来消息")


    # 持久化到本地
    with open(current_directory + '/device_message_list.pkl', 'wb') as file:
        pickle.dump(device_message_list, file)
    logger.info("对象已序列化并保存到 data.pkl")


def btnJian():

    while True:


        user = "哥哥"
        content = ""

        # 点击捡瓶子按钮

        if Selector().id("tt.lt.tt:id/bottle1").click().find():

            Selector().id("tt.lt.tt:id/bottle1").click().find()
            btn_content = Selector().id("tt.lt.tt:id/lao_content").find().text
            logger.info(btn_content)

            content = btn_content

            receiveMessage(user, btn_content)

            #点击扔回去
            Selector().id("tt.lt.tt:id/huifu_reback").click().find()

        if Selector().id("tt.lt.tt:id/bottle2").click().find():
            Selector().id("tt.lt.tt:id/bottle2").click().find()
            btn_content = Selector().id("tt.lt.tt:id/lao_content").find().text
            logger.info(btn_content)

            content = btn_content

            receiveMessage(user, btn_content)


            # 点击扔回去
            Selector().id("tt.lt.tt:id/huifu_reback").click().find()

        if Selector().id("tt.lt.tt:id/bottle3").click().find():
            Selector().id("tt.lt.tt:id/bottle3").click().find()
            btn_content = Selector().id("tt.lt.tt:id/lao_content").find().text
            logger.info(btn_content)

            content = btn_content
            # 点击扔回去
            Selector().id("tt.lt.tt:id/huifu_reback").click().find()

            receiveMessage(user, btn_content)

        if Selector().id("tt.lt.tt:id/bottle4").click().find():
            Selector().id("tt.lt.tt:id/bottle4").click().find()
            btn_content = Selector().id("tt.lt.tt:id/lao_content").find().text
            logger.info(btn_content)
            content = btn_content
            # 点击扔回去
            Selector().id("tt.lt.tt:id/huifu_reback").click().find()
            receiveMessage(user, btn_content)

        if Selector().id("tt.lt.tt:id/bottle5").click().find():
            Selector().id("tt.lt.tt:id/bottle5").click().find()
            btn_content = Selector().id("tt.lt.tt:id/lao_content").find().text
            logger.info(btn_content)
            content = btn_content
            # 点击扔回去
            Selector().id("tt.lt.tt:id/huifu_reback").click().find()

            receiveMessage(user, btn_content)




        # time.sleep(2)

def btnJian_ai_request():
    logger.info("666")

def btnJian_ai():

    while True:
        user = "捡瓶子"
        content = ""
        # 点击捡瓶子按钮

        for i in range(1, 6):

            logger.info(i)
            bottle_id = f"com.tanyu.me:id/bottle{i}"
            if Selector().id(bottle_id).click().find():
                Selector().id(bottle_id).click().find()


                # 查看财富等级
                Selector().id("com.tanyu.me:id/lao_avator").click().find()

                time.sleep(1)

                # 执行获取财富等级的操作
                Selector().id("com.tanyu.me:id/lao_avator").click().find()

                time.sleep(1)
                wealthlevel = Selector().id("com.tanyu.me:id/wealthlevel").find().text

                Selector().id("com.tanyu.me:id/login_back").click().find()
                logger.info(f"他的财富数据为: {wealthlevel}")
                wealthlevel_num = 0
                # 获取财富等级数值
                # 将字符串按照指定的分隔符切割，获取分隔符后的部分
                parts = wealthlevel.split("财富值LV")
                if len(parts) > 1:
                    wealthlevel_num = int(parts[1])
                logger.info(f"他的财富等级为: {wealthlevel_num}")

                Selector().id("com.tanyu.me:id/login_back").click().find()

                time.sleep(1)

                if wealthlevel_num < 10:
                    # 扔回去
                    Selector().id("com.tanyu.me:id/huifu_reback").click().find()

                    Selector().id("com.tanyu.me:id/title_back").click().find()
                    # 跳出本次循环
                    continue


                # 获取瓶子内容
                content = Selector().id("com.tanyu.me:id/lao_content").find().text()

                # 向ai获取回复
                logger.info(content)
                # receiveMessage(user, btn_content)

                # 扔回去
                Selector().id("com.tanyu.me:id/huifu_reback").click().find()

                # Selector().id("tt.lt.tt:id/huifu_reback").click().find()

        # time.sleep(2)
def sendMessage(contents):
    logger.info("发送消息给指定人")
    # 点击输入框，输入内容
    Selector().id("com.tanyu.me:id/chat_message_input").click().input(contents).find()
    time.sleep(1)

    # 点发送按钮
    Selector().id("com.tanyu.me:id/send_btn").click().find()
    time.sleep(1)



def sava_message():
    #获取最后一条对方消息
    find_all = Selector().id("com.tanyu.me:id/msg_body_tv").find_all()
    #获取列表的最后一项并获取text
    he_message = find_all[-1].text
    logger.info(he_message)
def string_to_list(input_str):
    # 去掉首尾的方括号和多余的空格
    input_str = input_str.strip("[]").strip()

    # 初始化一个空列表来存放结果
    result_list = []

    # 拆分字符串中的元素，基于逗号分隔
    items = input_str.split(", ")

    for item in items:
        # 去掉每个元素的多余空格
        item = item.strip()

        # 如果元素是数字字符串，转换为int
        if item.isdigit():
            item = int(item)
        elif item.replace('.', '', 1).isdigit():
            item = float(item)

        # 添加元素到列表中
        result_list.append(item)

    return result_list

#收到指令给服务器发送消息
def a(m):
    logger.info(m)

    command = m.getPath()
    contents = m.getParams().values().toString().replace("[", "").replace("]", "")
    contents2 = m.getParams().values().toString()

    logger.info(f"发来的数据：{contents2}")

    # 转换为列表
    contents = string_to_list(contents2)

    logger.info("命令是：")
    logger.info(command)
    logger.info("内容是：")
    logger.info(contents)


    #如果指令为扔瓶子,就执行脚本

    if command =="ren":
        logger.info("666")
        btnDiu(contents)


    # 解析出行号和内容


    if command =="sendMessage":
        sendMessage(contents)

    logger.info(type(command))


Channel(a)

logger.info("Hello AS!")

toast("开始运行",6000)

def task():


    # logger.info("task run ....")
    btnDiu_auto()
    try:
        # 在这里定义你要执行的任务
        btnDiu_auto()

    except Exception as e:
        logger.error(f"任务执行时出错: {e}")


def task2():

    logger.info("二层子任务执行了一次")
    # 创建调度器并设置时区
    scheduler2 = BackgroundScheduler(timezone=timezone('Asia/Shanghai'))

    # 添加任务，设置任务只执行一次
    scheduler2.add_job(task_test, 'date', run_date=datetime.now() + timedelta(seconds=random.randint(1, 3)))

    # 启动调度器
    scheduler2.start()

    # 为了让程序保持运行（调度器在后台运行）
    try:
        while True:
            pass
    except (KeyboardInterrupt, SystemExit):
        scheduler2.shutdown()

def ai_get(data):

    # 向服务器获取ai回复

    # 获取配置的url

    config = get_config()

    logger.info(f"获取到云端配置文件：{config}")

    url = config['url']

    logger.info(f"当前url ：{url}")


    response = requests.post(url, json=json.dumps(data))

    logger.info(response.text)

    return response.text
def extract_numbers(s: str) -> int:
    # 使用正则表达式提取字符串中的数值
    numbers = re.findall(r'\d+', s)

    if numbers:
        # 将提取到的数值列表拼接成一个字符串，然后转换为整数
        return int(''.join(numbers))
    else:
        # 如果没有找到数值，返回一个默认值或抛出异常
        return 0  # 或者 raise ValueError("No numbers found in the string")
def wealth_value_detection():
    # 执行获取财富等级的操作
    Selector().id("com.tanyu.me:id/chat_avator").click().find()

    time.sleep(1)

    wealthlevel = Selector().id("com.tanyu.me:id/wealthlevel").find().text
    Selector().id("com.tanyu.me:id/login_back").click().find()
    logger.info(f"他的财富数据为: {wealthlevel}")
    wealthlevel_num = 0
    # 获取财富等级数值
    # 将字符串按照指定的分隔符切割，获取分隔符后的部分
    parts = wealthlevel.split("财富值LV")
    if len(parts) > 1:
        wealthlevel_num = int(parts[1])
    logger.info(f"他的财富等级为: {wealthlevel_num}")

    time.sleep(2)

    if wealthlevel_num < 10:
        return False
    else:
        return True



def test1():
    scheduler = BackgroundScheduler(timezone=timezone('Asia/Shanghai'))
    scheduler.add_job(task2, 'interval', seconds=5)
    scheduler.start()

    # 这里可以放其他代码
    try:
        while True:
            time.sleep(3)
            logger.info(666)

    except (KeyboardInterrupt, SystemExit):
        scheduler.shutdown()  # 当程序结束时关闭调度器


def judge_the_first_chat():
    # logger.info("是否第一次聊天判断")

    chatContent_num = Selector().id("com.tanyu.me:id/chatContent").child().find_all()

    right_user_icon_view_num = 0

    if not chatContent_num:
        return

    for item in chatContent_num:
        if item.__dict__()["id"] == "com.tanyu.me:id/right_user_icon_view":
            right_user_icon_view_num = right_user_icon_view_num + 1

    if right_user_icon_view_num == 0:
        logger.info("是第一次聊天")
       
        return True


def count_words_and_chars(input_string):
    # 匹配中文字符的正则表达式
    chinese_char_pattern = r'[\u4e00-\u9fff]'

    # 匹配英文单词的正则表达式（包含大小写字母、数字、下划线）
    english_word_pattern = r'\b[a-zA-Z0-9]+\b'

    # 匹配中文字符，结果是每个中文字符
    chinese_chars = re.findall(chinese_char_pattern, input_string)

    # 匹配英文单词，结果是每个单词
    english_words = re.findall(english_word_pattern, input_string)

    # 总长度 = 中文字符个数 + 英文单词个数
    total_count = len(chinese_chars) + len(english_words)

    return total_count
def filter_string(input_string):
    # 检查字符串是否包含冒号或引号
    if ':' in input_string:
        logger.error("String contains a colon (:)")
        return False
    if "'" in input_string:
        logger.error("String contains a single quote (')")
        return False
    if '"' in input_string:
        logger.error('String contains a double quote (")')
        return False

    if '检测到对方怀疑' in input_string:
        logger.error('检测到怀疑')
        return False

    if '抱歉' in input_string:
        logger.error('检测到抱歉')
        return False

    if '无法' in input_string:
        logger.error('检测到无法')
        return False

    # 计算中文字符和英文单词的总数
    count = count_words_and_chars(input_string)

    # 检查字符串长度是否超过15个字符
    if count > 18:
        logger.error("String exceeds 15 characters in length")
        return False

    return True


def find_message_redDot():
    find = Selector().id("com.tanyu.me:id/message_num").find()
    if find:
        return True


def message_picture_judgment():
    find2 = Selector().id("com.tanyu.me:id/message_num").parent().find()
    # 判断消息是否为图片
    if find2.find(Selector().child(3)).__dict__()["text"] == "[图片]":
        logger.info("图片消息回复")

        return True


def image_message_processing():
    # 方法的具体实现

    # 执行图片处理函数

    logger.info("图片消息回复")

    Selector().id("com.tanyu.me:id/message_num").parent().click().find()

    time.sleep(2)
    # logger.info("到了聊天界面")

    # 发送不错
    sendMessage("不错")

    # 退出聊天界面
    Selector().id("com.tanyu.me:id/title_back").click().find()

    time.sleep(1)


def voice_message_processing():

    # 方法的具体实现
    logger.info("语音消息 回复")

    Selector().id("com.tanyu.me:id/message_num").parent().click().find()

    time.sleep(2)
    # logger.info("到了聊天界面")

    if not Selector().id("com.tanyu.me:id/chat_name").find():
        logger.info("找不到chat_name跳出")
        return

    user = Selector().id("com.tanyu.me:id/chat_name").find().text

    logger.info(f"获取到名字: {user}")

    logger.info(f"要发送的消息: 对方发来语音")

    if user == "执扇问佳人":
        user = "大哥哥"

    # # 获取ai回复
    data = {
        'device_id': "xiaomi11",
        'user': user,
        'message': "对方发来语音",
        'role': "user",
    }

    ai_reply = ai_get(data)
    # ai_reply = "777"

    if ai_reply != "请求失败":

        if filter_string(ai_reply):
            split_send(ai_reply)

            # 退出聊天界面
            Selector().id("com.tanyu.me:id/title_back").click().find()
            time.sleep(1)

        else:
            logger.info("检测到过滤问题")
            # 退出聊天界面
            Selector().id("com.tanyu.me:id/title_back").click().find()



def voice_message_judgment():
    find2 = Selector().id("com.tanyu.me:id/message_num").parent().find()
    # 方法的具体实现
    if find2.find(Selector().child(3)).__dict__()["text"] == "[语音]":
        logger.info("语音消息 回复")

        return True




def autoChat2(config):

    ifBtn = config['ifBtn']
    if ifBtn:
        logger.info("开启自动捡瓶子功能")
        toast("开启自动捡瓶子功能", 6000)
        scheduler = BackgroundScheduler(timezone=timezone('Asia/Shanghai'))
        scheduler.add_job(task, 'interval', minutes=5, id="task1")
        # scheduler.add_job(task, 'interval', seconds=5, id="task1")
        logger.info("scheduler.add_job task")
        scheduler.start()

    else:
        scheduler = False

    while True:

        time.sleep(1)

        if scheduler:
            # 判断任务是否已存在
            if scheduler.get_job("task1") is None:
                # 如果任务不存在，则添加任务
                logger.info("任务不存在，添加任务...")
                scheduler.add_job(task, 'interval', minutes=5, id="task1")
                logger.info("scheduler.add_job task")
            else:
                # 如果任务已存在，则跳过
                # logger.info("任务已存在，跳过添加")
                a =1

        # logger.info("大循环执行")




        if find_message_redDot():

            if scheduler:
                scheduler.remove_job('task1')  # 删除指定的任务
                logger.info("scheduler.remove_job task")

            reply_time = config.get("reply_time")

            start_time = reply_time.get("start")
            end_time = reply_time.get("end")

            # logger.info(f"start_time:{start_time}")
            # logger.info(f"end_time:{end_time}")

            time.sleep(random.randint(start_time, end_time))



            find2 = Selector().id("com.tanyu.me:id/message_num").parent().find()

            if not find2:
                logger.info("找不到find2跳出")
                continue

            try:
                if not find2.find(Selector().child(2)):
                    logger.info("找不到child(2)跳出")
                    continue

            # 执行操作
            except TypeError as e:
                logger.info(f"发生了一个错误: {e}")
                logger.info("可能是因为 find_all 返回了 None，无法迭代。")
                continue

            # 判断消息是否为图片
            if message_picture_judgment():
                image_message_processing()
                continue

            # 判断消息是否为语音
            if voice_message_judgment():
                voice_message_processing()


            # 获取有几条消息，决定等取几个消息
            message_num = message_num_get()


            Selector().id("com.tanyu.me:id/message_num").parent().click().find()

            time.sleep(2)

            # logger.info("到了聊天界面")
            # 判断是否为第一次聊天
            if judge_the_first_chat():
                # 第一次聊天处理
                first_chat_processing(message_num)


            if not chat_interface_judgment():
                logger.info("找不到十字跳出")
                continue



            # 获取user名
            userName = print(find2.find(Selector().child(1)).__dict__()["text"])


            # AI请求体封装
            if encapsulate_ai_request_body(message_num, userName):
                data = encapsulate_ai_request_body(message_num, userName)

            else:
                logger.info("AI请求体封装错误跳出")
                continue

            ai_reply = ai_get(data)

            if ai_reply != "请求失败":

                if filter_string(ai_reply):
                    split_send(ai_reply)

                    # 退出聊天界面
                    Selector().id("com.tanyu.me:id/title_back").click().find()
                    time.sleep(1)

                else:
                    logger.info("检测到过滤问题")
                    # 退出聊天界面
                    Selector().id("com.tanyu.me:id/title_back").click().find()


            time.sleep(1)


def user_message_get(message_num):
    message = []

    # 获取消息组件最后一条消息
    # 获取 所有的消息组件，获取最后一条消息内容返回给服务器

    all = Selector().id("com.tanyu.me:id/msg_body_tv").find_all()

    if not all:
        logger.info("找不到all跳出")
        return None

    # logger.info(f"all为: {all}")

    # 获取列表最后一项内容
    message_list = all[-message_num:]

    for item in message_list:
        message.append(item.text)

    logger.info(f"获取到消息: {message}")

    user_message = ""

    for item in message:
        user_message = user_message + item + "，"

    return user_message

def split_send(input_string):
    # 将字符串按照逗号分割成列表
    items = re.split(r'[，,]', input_string)

    # 循环遍历列表，打印每个元素
    for item in items:
        logger.info(item.strip())  # 使用 strip() 方法去除可能的空格
        sendMessage(item)

def get_config():

    # url = "http://127.0.0.1:5000/get_config"

    # url = "http://192.168.0.111:5000/get_config"

    # url = "http://103.149.200.228:8081/get_config"

    # 获取当前脚本的文件路径
    current_file_path = os.path.abspath(__file__)

    # 获取当前脚本所在的文件夹路径
    current_directory = os.path.dirname(current_file_path)

    # 读取 JSON 文件
    with open(current_directory + '/local_config.json', 'r') as file:
        config = json.load(file)
    # 访问配置数据


    url = config["url"] + "/get_config"

    logger.info(f"获取配置文件的url：{url}")


    response = requests.post(url)

    config = json.loads(response.text)

    logger.info(config)

    return config

def get_device_id():
    # 获取系统根目录
    current_file_path = os.path.abspath(__file__)

    # 获取根目录下的所有文件和文件夹
    items_in_root = os.path.dirname(current_file_path)

    # 指定你要查找的目录路径
    specified_directory = items_in_root  # 请替换为你的实际路径

    # 获取指定目录下的所有文件和文件夹
    items_in_directory = os.listdir(specified_directory)

    logger.info(items_in_directory)

    # 查找文件夹名称中包含 "device_id" 的文件夹
    folders_with_device_id = [item for item in items_in_directory if
                              os.path.isdir(os.path.join(specified_directory, item)) and "device_id" in item]

    # 打印结果
    if folders_with_device_id:
        # logger.info("找到包含 'device_id' 的文件夹：")
        for folder in folders_with_device_id:
            # logger.info(folder)
            a = 1

            return folder
    else:
        logger.info("没有找到包含 'device_id' 的文件夹。")

        # 指定你想要创建文件夹的路径
        specified_directory = items_in_root  # 请替换为你想要的路径

        # url = "http://127.0.0.1:5000/get_device_id"
        url = "http://103.149.200.228:8081/get_device_id"
        response = requests.post(url)
        logger.info(response.text)

        device_id = "device_id" + response.text

        # 创建一个名为 "device_id" 的文件夹
        device_id_folder_path = os.path.join(specified_directory, device_id)

        try:
            # 使用 os.makedirs 创建文件夹
            os.makedirs(device_id_folder_path, exist_ok=True)  # exist_ok=True 表示如果文件夹已存在，不会抛出异常
            logger.info(f"成功创建文件夹: {device_id_folder_path}")

            return device_id
        except Exception as e:
            logger.info(f"创建文件夹失败: {e}")


def tanyu_script():

    config = get_config()

    logger.info(f"获取到云端配置文件：{config}")

    # 获取当前脚本的文件路径
    current_file_path = os.path.abspath(__file__)

    # 获取当前脚本所在的文件夹路径
    current_directory = os.path.dirname(current_file_path)

    # 读取 JSON 文件
    # with open(current_directory + '/config.json', 'r') as file:
    #     config = json.load(file)
    # 访问配置数据

    autoChat2(config)

def task_remove(scheduler):
    # 获取当前系统的本地时间
    current_time = datetime.now()
    logger.info(f"当前本地时间: {current_time}")
    scheduler.remove_job('task1')  # 删除指定的任务
    logger.info("删除任务 task1 ")
    # 删除自己
    scheduler.remove_job('task2')
    logger.info("删除任务 删除自己")



def task_test(scheduler):
    # 获取当前系统的本地时间
    current_time = datetime.now()
    logger.info(f"当前本地时间: {current_time}")

    while True:

        logger.info("task run task_test")
        time.sleep(5)

    # 查看当前所有已添加的任务
    # jobs = scheduler.get_jobs()
    # for job in jobs:
    #     logger.info(f"任务ID: {job.id}, 下一次执行时间: {job.next_run_time}")
def scheduler_test():

    scheduler = BackgroundScheduler(timezone=timezone('Asia/Shanghai'))

    scheduler.add_job(
        task_test,
        'cron',
        hour=10,  # 每天10点执行
        minute=57,  # 精确到0分
        second=0,  # 精确到0秒
        id="task1",
        args=[scheduler]
    )

    scheduler.add_job(
        task_remove,
        'cron',
        hour=10,  # 每天10点执行
        minute=58,  # 精确到0分
        second=0,  # 精确到0秒
        id="task2",
        args=[scheduler]
    )

    scheduler.start()

    try:

        while True:
            logger.info("主线程运行中")
            time.sleep(5)
            # scheduler.remove_job('task1')  # 删除指定的任务
            # logger.info("scheduler.remove_job task_test")
            # time.sleep(5)
            # scheduler.add_job(task_test, 'interval', seconds=1, id="task1", args=[scheduler])



    except (KeyboardInterrupt, SystemExit):
        logger.info("程序终止，正在关闭调度器...")
        scheduler.shutdown()  # 当程序结束时关闭调度器



def test2():
    # 获取系统根目录
    current_file_path = os.path.abspath(__file__)

    # 获取根目录下的所有文件和文件夹
    items_in_root = os.path.dirname(current_file_path)

    # 指定你要查找的目录路径
    specified_directory = items_in_root # 请替换为你的实际路径

    # 获取指定目录下的所有文件和文件夹
    items_in_directory = os.listdir(specified_directory)

    logger.info(items_in_directory)

    # 查找文件夹名称中包含 "device_id" 的文件夹
    folders_with_device_id = [item for item in items_in_directory if
                              os.path.isdir(os.path.join(specified_directory, item)) and "device_id" in item]

    # 打印结果
    if folders_with_device_id:
        logger.info("找到包含 'device_id' 的文件夹：")
        for folder in folders_with_device_id:
            logger.info(folder)
    else:
        logger.info("没有找到包含 'device_id' 的文件夹。")

        # 指定你想要创建文件夹的路径
        specified_directory = items_in_root  # 请替换为你想要的路径

        device_id = "device_id"+"s1"

        # 创建一个名为 "device_id" 的文件夹
        device_id_folder_path = os.path.join(specified_directory, device_id)

        try:
            # 使用 os.makedirs 创建文件夹
            os.makedirs(device_id_folder_path, exist_ok=True)  # exist_ok=True 表示如果文件夹已存在，不会抛出异常
            logger.info(f"成功创建文件夹: {device_id_folder_path}")
        except Exception as e:
            logger.info(f"创建文件夹失败: {e}")






def test3():
    # 截取屏幕
    # from ascript.android import screen
    # bitmap = screen.capture()
    #
    # print(bitmap)
    #
    # # 将屏幕截图存储在SD卡下的1.png中
    # from ascript.android import screen
    # from ascript.android.system import R
    #
    # # 获取当前脚本的文件路径
    # current_file_path = os.path.abspath(__file__)
    #
    # # 获取当前脚本所在的文件夹路径
    # current_directory = os.path.dirname(current_file_path)
    #
    # current_directory = current_directory.replace("/storage/emulated/0", "", 1)
    #
    # print(current_directory)
    #
    #
    # screen.bitmap_to_file(R.sd(current_directory + r"/12111.png"))


    # 查找一个满足颜色特征的点
    # 导包
    from ascript.android.screen import FindColors

    # 白色 f2f2f2

    point = FindColors.find('0,0,#f9e181',)
    if point:
        # 打印 x坐标 和 y坐标
        print(point.x, point.y)

    point = FindColors.find('0,0,#f2f2f2', rect=[99,119,540,960])
    if point:
        # 打印 x坐标 和 y坐标
        print(point.x, point.y)



    points = FindColors.find_all(
        '0,0,#f9e181',
        rect=[163, 119, 540, 960]
       )
    if points:
        # 打印 x坐标 和 y坐标
        for p in points:
            if p.x == 163:
                print(p.x, p.y)


    from ascript.android.screen import FindColors





    # print(user_message_get(3))




    # find2 = Selector().id("com.qieyu.bottle:id/conversation_unread").parent().find()
    #
    # # 判断消息是否为图片
    # print(find2.find(Selector().child(3)).__dict__()["text"])
    # print(find2.find(Selector().child(2)).__dict__()["text"])
    # print(find2.find(Selector().child(1)).__dict__()["text"])

    # if find2.find(Selector().child(3)).__dict__()["text"] == "[图片]":
    #     logger.info("图片消息回复")
    #
    #
    # # 获取有几条消息，决定等取几个消息
    # message_num = int(Selector().id("com.qieyu.bottle:id/conversation_unread").find().text)
    # return message_num


def test4():
    screenshot_coordinates = [8, 116, 520, 814]

    top_left_coordinates = get_top_left_coordinates(screenshot_coordinates)



    # word_rect_list = []
    #
    # all_top_right_coordinates_list = get_all_top_right_coordinates()
    #
    # if all_top_right_coordinates_list:
    #
    #     for top_right_coordinates in all_top_right_coordinates_list:
    #         bottom_right_coordinates = get_bottom_right_coordinates(top_right_coordinates)
    #
    #         if bottom_right_coordinates:
    #             word_rect_list.append([top_right_coordinates[0], top_right_coordinates[1], bottom_right_coordinates[2],bottom_right_coordinates[3]])
    #
    # print("找到word_rect_list:", word_rect_list)








    # path = R.res("/img/3.png")  # 这里替换为你的图片地址
    #
    # res = FindImages.find(path)
    #
    # if res:
    #     print("中心坐标:", res["center_x"], res["center_y"])
    #     print("相似度:", res["confidence"])
    #     print("在屏幕中的范围:", res["rect"])
    #
    # action.click(res["center_x"], res["center_y"], 20)
    #
    capture_specific_area([84, 500, 443, 651],"one10")
    capture_specific_area([388, 724, 460, 793],"one11")
    #


toast(f"当前deviceid = {get_device_id()}", 6000)
# logger.info(666)
# suiyuan_script()
# btnDiu_auto()
# btnJian()
# test2()
# autoChat2()
# btnJian_ai()
# test1()

# get_config()
# scheduler_test()
# tanyu_script()
test4()

